#ifndef __IELEMENT__HPP__
#define __IELEMENT__HPP__

#include <vector>
#include <SDL.h>

#include "vec.hpp"



class IElement;
typedef IElement* IElementP;
#define UI_BACK_COLOR 0x00c2c2c2
#define UI_FORE_COLOR 0x002c2c2c
#define UI_SEL_COLOR 0x009b8c00
#define UI_HIGH_COLOR 0x00e2e2e2
#define UI_BORD_COLOR 0x00009b8c

class IElement
{
public:
  IElement(IElement*, SDL_Surface*);
  virtual ~IElement();

  void Update();
  void Render(Vec<int,2>&);

  void AddChild(IElement*);

  void SetPosition(int x, int y);
  void SetSize(int x, int y);

  bool MouseUp(int x, int y, Uint8 button);
  bool MouseDown(int x, int y, Uint8 button);
  bool MouseMove(int x, int y, Uint8 button);
  bool KeyDown(Uint8 key);

protected:

  virtual void update() = 0;
  virtual void render(int x, int y) = 0;

  virtual void onResize();
  virtual void onMove();

  virtual bool mouseUp(int x, int y, Uint8 button);
  virtual bool mouseDown(int x, int y, Uint8 button);
  virtual bool mouseMove(int x, int y, Uint8 button);
  virtual bool keyDown(Uint8 key);

  Vec<int, 2> position_;
  Vec<int, 2> size_;

  IElement* parent_;
  std::vector<IElementP> childs_;
  SDL_Surface* surface_;

  bool pressed_;



};



#endif
